//package com.caltco.cargo.ops.modules.file;
//
//import com.caltco.cargo.ops.base.BaseController;
//import com.caltco.cargo.ops.common.api.R2;
//import com.caltco.cargo.ops.common.api.Result;
//import com.caltco.cargo.ops.common.exception.RRException;
//import com.caltco.cargo.ops.common.vo.MinioUploadVo;
//import io.minio.*;
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.ByteArrayInputStream;
//import java.text.SimpleDateFormat;
//import java.util.Base64;
//import java.util.Date;
//import java.util.UUID;
//
///**
// * @description:
// * @author: tan
// * @email: tan2511217211@163.com
// * @date: 2022/5/27 15:29
// **/
//@Tag(name = "MinIO对象存储管理")
//@Controller
//@RequestMapping("/api/minio")
//public class MinioController extends BaseController {
//    @Value("${minio.endpoint}")
//    private String ENDPOINT;
//    @Value("${minio.bucketName}")
//    private String BUCKET_NAME;
//    @Value("${minio.accessKey}")
//    private String ACCESS_KEY;
//    @Value("${minio.secretKey}")
//    private String SECRET_KEY;
//
//    @Autowired
//    private MinioClient minioClient;
//
//    @Operation(summary = "文件上传")
//    @RequestMapping(value = "/upload", method = RequestMethod.POST)
//    @ResponseBody
//    public MinioUploadVo upload(MultipartFile file) {
//        try {
//            boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET_NAME).build());
//            if (!isExist) {
//                //创建存储桶并设置只读权限
//                minioClient.makeBucket(MakeBucketArgs.builder().bucket(BUCKET_NAME).build());
//            }
//            //获取文件名
//            String originalFilename = file.getOriginalFilename();
//            //获取文件后缀名
//            assert originalFilename != null;
//            String substring = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
//            //使用uuid作为文件名防止重复
//            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//            String fileName = uuid + "." + substring;
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//            // 设置存储对象名称
//            String objectName = sdf.format(new Date()) + "/" + fileName;
//            // 使用putObject上传一个文件到存储桶中
//            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
//                    .bucket(BUCKET_NAME)
//                    .object(objectName)
//                    .contentType(file.getContentType())
//                    .stream(file.getInputStream(), file.getSize(), ObjectWriteArgs.MIN_MULTIPART_SIZE).build();
//            minioClient.putObject(putObjectArgs);
//            MinioUploadVo minioUploadVo = new MinioUploadVo();
//            minioUploadVo.setName(originalFilename);
//            minioUploadVo.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
//            return minioUploadVo;
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new RRException("文件上传失败");
//        }
//    }
//
//    @Operation(summary = "文件删除")
//    @RequestMapping(value = "/delete", method = RequestMethod.POST)
//    @ResponseBody
//    public Result<MinioUploadVo> delete(@RequestParam("objectName") String objectName) {
//        try {
//            minioClient.removeObject(RemoveObjectArgs.builder().bucket(BUCKET_NAME).object(objectName).build());
//            return R2.setOkMsg("删除成功");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return R2.setErrMsg("删除失败");
//    }
//
//
//    @Operation(summary = "Base64编码文件上传")
//    @PostMapping("/uploadBase64")
//    @ResponseBody
//    public MinioUploadVo uploadBase64(@RequestBody String base64EncodedFile) {
//        try {
//            // 去除可能存在的"data:"协议和";base64,"前缀
//            if (base64EncodedFile.contains(",")) {
//                base64EncodedFile = base64EncodedFile.split(",")[1];
//            }
//
//            // 解码Base64字符串
//            byte[] fileBytes = Base64.getDecoder().decode(base64EncodedFile);
//            ByteArrayInputStream inputStream = new ByteArrayInputStream(fileBytes);
//
//            // 创建唯一的文件名（这里假设你知道文件类型）
//            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//            String fileName = uuid + ".ext"; // 你需要根据实际情况设置正确的扩展名
//
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//            String objectName = sdf.format(new Date()) + "/" + fileName;
//
//            // 使用putObject上传一个文件到存储桶中
//            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
//                    .bucket(BUCKET_NAME)
//                    .object(objectName)
//                    .contentType("application/octet-stream") // 根据实际情况设置正确的 MIME 类型
//                    .stream(inputStream, fileBytes.length, ObjectWriteArgs.MIN_MULTIPART_SIZE).build();
//            minioClient.putObject(putObjectArgs);
//
//            MinioUploadVo minioUploadVo = new MinioUploadVo();
//            minioUploadVo.setName(fileName); // 或者你有办法获取原始文件名的话使用原始文件名
//            minioUploadVo.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
//            return minioUploadVo;
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new RRException("文件上传失败");
//        }
//    }
//}
